/**
 * 将箭头函数转换为普通函数
 */

import generate from '@babel/generator'
import { parse } from '@babel/parser'
import traverse from '@babel/traverse'

import fs from 'node:fs'
import path from 'node:path'

const target = path.resolve(__dirname, '../demo/07.js')

const content = fs.readFileSync(target, {
	encoding: 'utf-8',
})

const ast = parse(content)

traverse(ast, {
	/**
	 * 箭头函数钩子
	 */
	ArrowFunctionExpression(path) {
		// 官方解释： 在某些转换情况下，此回调函数已经从箭头函数转成普通函数 function ，则不需要进一步处理
		if (!path.isArrowFunctionExpression()) return

		path.arrowFunctionToExpression({
			allowInsertArrow: false
		})
	},
})

const dir = path.resolve(__dirname, '../demo/07-1.js')
fs.writeFileSync(dir, generate(ast).code)
